{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "90b968a1-de74-4527-b766-00dd831f2d39",
   "metadata": {},
   "source": [
    "## SVM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "111e51ac-bd6f-4f89-a51b-02211debf010",
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy import stats\n",
    "\n",
    "# use seaborn plotting defaults\n",
    "import seaborn as sns; sns.set()   ##画图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "eb64189a-a633-4e52-bc0c-48eab96ac24b",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5.1</td>\n",
       "      <td>3.5</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4.9</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4.7</td>\n",
       "      <td>3.2</td>\n",
       "      <td>1.3</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.6</td>\n",
       "      <td>3.1</td>\n",
       "      <td>1.5</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5.0</td>\n",
       "      <td>3.6</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>145</th>\n",
       "      <td>6.7</td>\n",
       "      <td>3.0</td>\n",
       "      <td>5.2</td>\n",
       "      <td>2.3</td>\n",
       "      <td>Iris-virginica</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>146</th>\n",
       "      <td>6.3</td>\n",
       "      <td>2.5</td>\n",
       "      <td>5.0</td>\n",
       "      <td>1.9</td>\n",
       "      <td>Iris-virginica</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>147</th>\n",
       "      <td>6.5</td>\n",
       "      <td>3.0</td>\n",
       "      <td>5.2</td>\n",
       "      <td>2.0</td>\n",
       "      <td>Iris-virginica</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>148</th>\n",
       "      <td>6.2</td>\n",
       "      <td>3.4</td>\n",
       "      <td>5.4</td>\n",
       "      <td>2.3</td>\n",
       "      <td>Iris-virginica</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>149</th>\n",
       "      <td>5.9</td>\n",
       "      <td>3.0</td>\n",
       "      <td>5.1</td>\n",
       "      <td>1.8</td>\n",
       "      <td>Iris-virginica</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>150 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       0    1    2    3               4\n",
       "0    5.1  3.5  1.4  0.2     Iris-setosa\n",
       "1    4.9  3.0  1.4  0.2     Iris-setosa\n",
       "2    4.7  3.2  1.3  0.2     Iris-setosa\n",
       "3    4.6  3.1  1.5  0.2     Iris-setosa\n",
       "4    5.0  3.6  1.4  0.2     Iris-setosa\n",
       "..   ...  ...  ...  ...             ...\n",
       "145  6.7  3.0  5.2  2.3  Iris-virginica\n",
       "146  6.3  2.5  5.0  1.9  Iris-virginica\n",
       "147  6.5  3.0  5.2  2.0  Iris-virginica\n",
       "148  6.2  3.4  5.4  2.3  Iris-virginica\n",
       "149  5.9  3.0  5.1  1.8  Iris-virginica\n",
       "\n",
       "[150 rows x 5 columns]"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "data= pd.read_csv(\"D:/Pythonwork/homework/homework/irisdata.txt\",header=None)\n",
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "a216b39a-0d2d-4871-87a7-28357badd099",
   "metadata": {},
   "outputs": [],
   "source": [
    "X=data.iloc[0:150,0:4]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "b5a7dc6e-aff0-48e6-bcd8-12c605b4d17d",
   "metadata": {},
   "outputs": [],
   "source": [
    "data['target'] = 0\n",
    "data.loc[(data[4] == 'Iris-versicolor'), 'target'] = 1\n",
    "data.loc[(data[4] == 'Iris-virginica'), 'target'] = 2\n",
    "y= data['target'] "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "fe4971d5-0099-4a9d-b912-e1ac5b082ab8",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.datasets import make_blobs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "f1d68b23-a00f-43ef-845b-466155678360",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 拆分训练集和测试集\n",
    "from sklearn.model_selection import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1086)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "5f5d7682-663c-45c7-aac9-0cc45fd6c293",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-7 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-7 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-7 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-7 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-7 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-7 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-7 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-7 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-7 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-7 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-7 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-7 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-7 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-7 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-7 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-7 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-7 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-7\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>SVC(C=10000000000.0, kernel=&#x27;linear&#x27;)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-7\" type=\"checkbox\" checked><label for=\"sk-estimator-id-7\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;SVC<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.svm.SVC.html\">?<span>Documentation for SVC</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>SVC(C=10000000000.0, kernel=&#x27;linear&#x27;)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "SVC(C=10000000000.0, kernel='linear')"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.svm import SVC # \"Support vector classifier\"\n",
    "model = SVC(kernel='linear', C=1E10)\n",
    "model.fit(X_train,  y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "099a6bca-2edc-465c-b932-1b9d2d9248f4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9777777777777777\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       1.00      1.00      1.00        14\n",
      "           1       1.00      0.93      0.97        15\n",
      "           2       0.94      1.00      0.97        16\n",
      "\n",
      "    accuracy                           0.98        45\n",
      "   macro avg       0.98      0.98      0.98        45\n",
      "weighted avg       0.98      0.98      0.98        45\n",
      "\n",
      "[[14  0  0]\n",
      " [ 0 14  1]\n",
      " [ 0  0 16]]\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import classification_report\n",
    "from sklearn.metrics import confusion_matrix\n",
    "from sklearn.metrics import roc_curve\n",
    "from sklearn.metrics import auc\n",
    "\n",
    "print(model.score(X_test,y_test))\n",
    "\n",
    "# 利用模型对测试集进行预测，输出target预测标签值和概率\n",
    "y_test_pred = model.predict(X_test)\n",
    "\n",
    "\n",
    "# 分类评估汇总报告classification_report\n",
    "print(classification_report(y_test,y_test_pred))\n",
    "\n",
    "# 误分类矩阵 confusion_matrix\n",
    "print(confusion_matrix(y_test,y_test_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5588b9df-5b87-4978-a30c-122ef358ad3b",
   "metadata": {},
   "source": [
    "##  聚类分析+Kmeans使用"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "id": "e0999e20-dd57-48f8-9d24-2b77a97e13ad",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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REQkKSYjREREJCkmI0RERCQpJiNEREQkKSYjREREJCkmI0RERCQpJiNEREQkKSYjREREJCkmI0RERCQpJiNEREQkKSYjREREJCkmI0RERCQpJiNEREQkKSYjREREJCkmI0RERCQpJiNEREQkKSYjREREJCkmI0RERCQpJiNEREQkKSYjREREJCkmI0RERCQpJiNEREQkKSYjREREJCkmI0RERCQpJiNEREQkKSYjREREJCkmI0RERCQpJiNEREQkKSYjREREJCkmI0RERCQpJiNEREQkKSYjREREJCkmI0RERCQpJiNEREQkKSYjREREJCkmI0RERCQph5KRjIwMzJ49G926dUP79u3x6quv4tSpU+L7586dw9ChQ9G2bVt0794da9ascXrAREREVLk4lIy88847+Pvvv7Fo0SJs3rwZLVu2xOjRo5GUlIT09HSMHDkSjRo1ws8//4yJEydi6dKl+Pnnn8srdiIiIqoElPYWTE5ORkxMDH788Ue0b98eABAREYHDhw9jx44dcHd3h0qlwgcffAClUomgoCAkJydj1apVGDhwYLmtABEREVVsdteMeHt7Y+XKlWjVqpX4mkwmgyAIyMzMxKlTpxASEgKl8t/85qmnnsLVq1eRlpbm3KiJiIio0rC7ZsTLywuhoaFmr+3atQvXr19H165dsXjxYjRr1szs/Vq1agEAbt++jZo1a5Y6SIVCbva/tWlXL2dKrpC5fKxSx1CRYnWFGBirY+UEvUF8zdb30RVirUjbtTLG6goxVMRYHSETBEFweC4AsbGxePPNN/H0009j+fLl6NWrF/r27Yu3335bLHPjxg307NkT33//PTp27Fiaj4EgCJDJZKWa19Xka3QYNGMnAOCn+S/BXW13LkhETsbvI5HrKNW3b9++fXj33XfRpk0bLFq0CADg7u4OrVZrVk6j0QAAPDw8Sh2gwSAgNzcfXl5VkJWVBwAWp/V6AxQKucuWAwCV2k1cr6zsPLirPV02VqljqEixukIMjNXxcgUmNSPWvo+uEmtF2q6VLVZXiKGixuoIh5OR9evXY968eejVqxcWLlwIlUoFAKhduzZSUlLMyhr/9vf3d/RjzOj/d9LQm5w8ik7rdNbfc4VyRRn0gsvHWpG26+MeA2N1vJzB8G+lsLXvo6vE6sxyrhBDRYrVFWKoqLE6wqGGnR9++AEff/wxXn/9dSxZskRMRAAgJCQEsbGx0Ov14mvHjh1DYGBgmfqLEBERUeVmdzJy9epVzJ8/H7169cK4ceOQlpaG+/fv4/79+8jOzsbAgQORk5ODiIgIXL58GVu2bMG6deswbty48oyfiIiIKji7m2n27NmDgoIC7N27F3v37jV7b8CAAViwYAFWr16NefPmYcCAAfDz88O0adMwYMAApwdNRERElYfdycj48eMxfvx4m2WefPJJbNy4scxBERER0ePD8YeBiYiIiJyIyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJqkzJyPLly/HGG2+YvRYeHo7g4GCzf926dStTkERERFR5KUs7Y3R0ND7//HOEhISYvX7hwgWMHz8eQ4cOFV9TKBSlj5CIiIgqNYeTkXv37iEiIgKxsbEIDAw0e0+v1+Py5ct466234Ofn57QgiYiIqPJyuJkmMTER1atXx/bt29GmTRuz965duwaNRoOgoCCnBUhERESVm8M1Iz169ECPHj0svnfx4kXIZDKsW7cOhw8fhlwuR2hoKCZPngxPT89SB6lQyM3+tzbt6uVMyRUyl49V6hgqUqyuEANjdaycoDeIr9n6PrpCrBVpu1bGWF0hhooYqyNkgiAIDs/1P++//z5u3bqF7777DgDw+eefY8WKFZgyZQpCQ0ORnJyMTz75BHXq1MG6desglzseoCAIkMlkpQ3RpeRrdBg0YycA4Kf5L8FdXeouO0RURvw+ErkOp377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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "std = StandardScaler()\n",
    "X = std.fit_transform(X*1.0)     ## 标准化\n",
    "\n",
    "\n",
    "import scipy\n",
    "from scipy.cluster import hierarchy\n",
    "dendro=hierarchy.dendrogram(hierarchy.linkage(X,method='ward'))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e3d5a189-c954-4f79-87a3-04a784023447",
   "metadata": {},
   "source": [
    "#### 肘部法则"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "id": "5424b440-52b6-481a-af3f-dce1487a1f2a",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Python\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\Python\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\Python\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\Python\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\Python\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\Python\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\Python\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'wcss: sum of dist. of sample to their closest cluster center')"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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pXuRcouH27q2qa/ntP9Np7u6ExEREQHFQ3GW5qawNDeFi/0/x5/c2NRQqv6UbSIiIiIRWPwQERFRjcLih4iIiGoUFj9ERERUo4gufnr06IEbN26Uey4qKor7ehEREZFRE1381KlTB6ampuWek8lkqFOnTqVDEREREemL6Efd//e//z31nLu7+3+eJyIiIjI0ncz5KSoqQkZGhi5uRURERKRXooufoqIiBAcH47vvvgMAnDlzBh07dsQLL7yAUaNGITMzU+chiYiIiHRFdPGzYcMGbN68GY8ePQIALF++HHZ2dpg3bx7u3r2Lzz77TOchiYiIiHRFdPFz5MgRzJgxA8OGDcOtW7cQExODSZMmYeTIkXj33Xfx22+/6SMnERERkU6ILn4ePnyo2dT05MmTkEgk6Nq1KwDA1dVV0yNEREREZIxEFz/Ozs5ISEgAABw7dgzNmjWDvX3xjmWRkZFwdXXVbUIiIiIiHRL9qPuAAQOwYsUKfP/997hw4QIWLlwIAFi2bBm+/vprTJw4UechnzeJRIC9vZXe7i+XW+jt3tUN20p7bCvtsa20x7YSh+2lPV23lUQiaH2toFar1WJurlarsW3bNoSFhcHf3x/jxo0DALz++uto3749pk+fDomEu2YQERGRcRJd/BARERFVZRXqogkLC0NERAQAICEhAePHj0f//v2xceNGnYYjIiIi0jXRxc+3336LkSNH4tdffwUALF68GGFhYXBzc8OWLVuwbds2nYckIiIi0hXRxc/OnTsRFBSE2bNnIzU1FadPn8bUqVMRHByMd999FwcPHtRHTiIiIiKdEF383Lp1C6+88gqA4nV+1Go1evToAQBo1aoV7t+/r9uERERERDokuviRy+XIzs4GAJw4cQJ16tRBw4YNAQB3796FnZ2dTgMSERER6ZLodX46dOiA4OBgxMTE4NixY3jrrbcAAD///DPWrVuHzp076zwkERERka6IftQ9PT0d7733nmadnzVr1sDa2hoBAQFwdXXFxo0b4eDgoK+8RERERJWik3V+lEolkpKSUKdOHV1kIiIiItKbCq3zs3nzZowZM0bzfXh4OAYNGoTPP/9cV7mIiIiI9EJ08bNjxw4EBwfD09NTc8zNzQ2vvPIKPvvsM+zdu1enAYmIiIh0SfSwV69evfB///d/GDt2bJlz27Ztw7fffosffvhBZwGJ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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.cluster import KMeans\n",
    "wcss=[]\n",
    "for i in range(1,8):\n",
    "    kmeans=KMeans(n_clusters=i,init='k-means++',)\n",
    "    kmeans.fit(X)\n",
    "    wcss.append(kmeans.inertia_)\n",
    "    \n",
    "plt.plot(range(1,8),wcss)\n",
    "plt.title('Elbow Method')\n",
    "plt.xlabel('No. of cluster')\n",
    "plt.ylabel('wcss: sum of dist. of sample to their closest cluster center' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "id": "828b1ee9-4fc6-439b-89ef-d3ea433bb92d",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Python\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n"
     ]
    }
   ],
   "source": [
    "kmeans_1=KMeans(n_clusters=3)\n",
    "kmeans_1.fit(X)\n",
    "cluster_pred=kmeans_1.predict(X)\n",
    "cluster_pred_2=kmeans_1.labels_\n",
    "cluster_center=kmeans_1.cluster_centers_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "id": "8d9da893-258a-473e-ac9c-ed6ff0f78133",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
       "       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2,\n",
       "       2, 2, 2, 2, 2, 2, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1,\n",
       "       0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1,\n",
       "       1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1])"
      ]
     },
     "execution_count": 111,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cluster_pred_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "id": "dfdaba46-4b18-4983-a248-8fb06364d02e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-1.01457897,  0.84230679, -1.30487835, -1.25512862],\n",
       "       [-0.01139555, -0.87288504,  0.37688422,  0.31165355],\n",
       "       [ 1.16743407,  0.15377779,  1.00314548,  1.02963256]])"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cluster_center"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "id": "3706187f-dc51-45a2-982f-fa60f235d74c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0      0\n",
       "1      0\n",
       "2      0\n",
       "3      0\n",
       "4      0\n",
       "      ..\n",
       "145    2\n",
       "146    2\n",
       "147    2\n",
       "148    2\n",
       "149    2\n",
       "Name: target, Length: 150, dtype: int64"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "id": "28cc77b0-79ce-44a0-80dd-8ca4a950a9a0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.8533333333333334\n"
     ]
    }
   ],
   "source": [
    "a=0\n",
    "for i in range(150):\n",
    "    if i <50:\n",
    "        if cluster_pred_2[i]==2:\n",
    "            a+=1\n",
    "    elif 50<=i<100:\n",
    "        if cluster_pred_2[i]==0:\n",
    "            a+=1\n",
    "    else:\n",
    "         if cluster_pred_2[i]==1:\n",
    "            a+=1\n",
    "a            \n",
    "print(a/150)        \n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "id": "119e1625-69f5-4322-afb1-1ca02cd273b5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.8533333333333334\n"
     ]
    }
   ],
   "source": [
    "a=0\n",
    "b=-1\n",
    "for i in (2,0,1):\n",
    "    b+=1\n",
    "    for j in range(50):\n",
    "        if cluster_pred_2[j+b*50]==i:\n",
    "            a+=1 \n",
    "\n",
    "a            \n",
    "print(a/150)  "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "13bc0383-694f-4d02-951b-41c8626ae37e",
   "metadata": {},
   "source": [
    "## 作业"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6cc278aa-6f79-4292-8e2b-f4f313b5652a",
   "metadata": {},
   "source": [
    "### 数据准备"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "f4da8306-36df-4a82-a264-f75109413f4f",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>13</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>14.23</td>\n",
       "      <td>1.71</td>\n",
       "      <td>2.43</td>\n",
       "      <td>15.6</td>\n",
       "      <td>127</td>\n",
       "      <td>2.80</td>\n",
       "      <td>3.06</td>\n",
       "      <td>0.28</td>\n",
       "      <td>2.29</td>\n",
       "      <td>5.64</td>\n",
       "      <td>1.04</td>\n",
       "      <td>3.92</td>\n",
       "      <td>1065</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>13.20</td>\n",
       "      <td>1.78</td>\n",
       "      <td>2.14</td>\n",
       "      <td>11.2</td>\n",
       "      <td>100</td>\n",
       "      <td>2.65</td>\n",
       "      <td>2.76</td>\n",
       "      <td>0.26</td>\n",
       "      <td>1.28</td>\n",
       "      <td>4.38</td>\n",
       "      <td>1.05</td>\n",
       "      <td>3.40</td>\n",
       "      <td>1050</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>13.16</td>\n",
       "      <td>2.36</td>\n",
       "      <td>2.67</td>\n",
       "      <td>18.6</td>\n",
       "      <td>101</td>\n",
       "      <td>2.80</td>\n",
       "      <td>3.24</td>\n",
       "      <td>0.30</td>\n",
       "      <td>2.81</td>\n",
       "      <td>5.68</td>\n",
       "      <td>1.03</td>\n",
       "      <td>3.17</td>\n",
       "      <td>1185</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>14.37</td>\n",
       "      <td>1.95</td>\n",
       "      <td>2.50</td>\n",
       "      <td>16.8</td>\n",
       "      <td>113</td>\n",
       "      <td>3.85</td>\n",
       "      <td>3.49</td>\n",
       "      <td>0.24</td>\n",
       "      <td>2.18</td>\n",
       "      <td>7.80</td>\n",
       "      <td>0.86</td>\n",
       "      <td>3.45</td>\n",
       "      <td>1480</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>13.24</td>\n",
       "      <td>2.59</td>\n",
       "      <td>2.87</td>\n",
       "      <td>21.0</td>\n",
       "      <td>118</td>\n",
       "      <td>2.80</td>\n",
       "      <td>2.69</td>\n",
       "      <td>0.39</td>\n",
       "      <td>1.82</td>\n",
       "      <td>4.32</td>\n",
       "      <td>1.04</td>\n",
       "      <td>2.93</td>\n",
       "      <td>735</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>173</th>\n",
       "      <td>3</td>\n",
       "      <td>13.71</td>\n",
       "      <td>5.65</td>\n",
       "      <td>2.45</td>\n",
       "      <td>20.5</td>\n",
       "      <td>95</td>\n",
       "      <td>1.68</td>\n",
       "      <td>0.61</td>\n",
       "      <td>0.52</td>\n",
       "      <td>1.06</td>\n",
       "      <td>7.70</td>\n",
       "      <td>0.64</td>\n",
       "      <td>1.74</td>\n",
       "      <td>740</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>174</th>\n",
       "      <td>3</td>\n",
       "      <td>13.40</td>\n",
       "      <td>3.91</td>\n",
       "      <td>2.48</td>\n",
       "      <td>23.0</td>\n",
       "      <td>102</td>\n",
       "      <td>1.80</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.43</td>\n",
       "      <td>1.41</td>\n",
       "      <td>7.30</td>\n",
       "      <td>0.70</td>\n",
       "      <td>1.56</td>\n",
       "      <td>750</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>175</th>\n",
       "      <td>3</td>\n",
       "      <td>13.27</td>\n",
       "      <td>4.28</td>\n",
       "      <td>2.26</td>\n",
       "      <td>20.0</td>\n",
       "      <td>120</td>\n",
       "      <td>1.59</td>\n",
       "      <td>0.69</td>\n",
       "      <td>0.43</td>\n",
       "      <td>1.35</td>\n",
       "      <td>10.20</td>\n",
       "      <td>0.59</td>\n",
       "      <td>1.56</td>\n",
       "      <td>835</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>176</th>\n",
       "      <td>3</td>\n",
       "      <td>13.17</td>\n",
       "      <td>2.59</td>\n",
       "      <td>2.37</td>\n",
       "      <td>20.0</td>\n",
       "      <td>120</td>\n",
       "      <td>1.65</td>\n",
       "      <td>0.68</td>\n",
       "      <td>0.53</td>\n",
       "      <td>1.46</td>\n",
       "      <td>9.30</td>\n",
       "      <td>0.60</td>\n",
       "      <td>1.62</td>\n",
       "      <td>840</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>177</th>\n",
       "      <td>3</td>\n",
       "      <td>14.13</td>\n",
       "      <td>4.10</td>\n",
       "      <td>2.74</td>\n",
       "      <td>24.5</td>\n",
       "      <td>96</td>\n",
       "      <td>2.05</td>\n",
       "      <td>0.76</td>\n",
       "      <td>0.56</td>\n",
       "      <td>1.35</td>\n",
       "      <td>9.20</td>\n",
       "      <td>0.61</td>\n",
       "      <td>1.60</td>\n",
       "      <td>560</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>178 rows × 14 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     0      1     2     3     4    5     6     7     8     9      10    11  \\\n",
       "0     1  14.23  1.71  2.43  15.6  127  2.80  3.06  0.28  2.29   5.64  1.04   \n",
       "1     1  13.20  1.78  2.14  11.2  100  2.65  2.76  0.26  1.28   4.38  1.05   \n",
       "2     1  13.16  2.36  2.67  18.6  101  2.80  3.24  0.30  2.81   5.68  1.03   \n",
       "3     1  14.37  1.95  2.50  16.8  113  3.85  3.49  0.24  2.18   7.80  0.86   \n",
       "4     1  13.24  2.59  2.87  21.0  118  2.80  2.69  0.39  1.82   4.32  1.04   \n",
       "..   ..    ...   ...   ...   ...  ...   ...   ...   ...   ...    ...   ...   \n",
       "173   3  13.71  5.65  2.45  20.5   95  1.68  0.61  0.52  1.06   7.70  0.64   \n",
       "174   3  13.40  3.91  2.48  23.0  102  1.80  0.75  0.43  1.41   7.30  0.70   \n",
       "175   3  13.27  4.28  2.26  20.0  120  1.59  0.69  0.43  1.35  10.20  0.59   \n",
       "176   3  13.17  2.59  2.37  20.0  120  1.65  0.68  0.53  1.46   9.30  0.60   \n",
       "177   3  14.13  4.10  2.74  24.5   96  2.05  0.76  0.56  1.35   9.20  0.61   \n",
       "\n",
       "       12    13  \n",
       "0    3.92  1065  \n",
       "1    3.40  1050  \n",
       "2    3.17  1185  \n",
       "3    3.45  1480  \n",
       "4    2.93   735  \n",
       "..    ...   ...  \n",
       "173  1.74   740  \n",
       "174  1.56   750  \n",
       "175  1.56   835  \n",
       "176  1.62   840  \n",
       "177  1.60   560  \n",
       "\n",
       "[178 rows x 14 columns]"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 利用pandas导入csv数据，查看前5行导入结果看是否正常\n",
    "import pandas as pd\n",
    "data = pd.read_csv(\"D:/Pythonwork/homework/homework/wine.txt\",header=None)\n",
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "e825d3a5-ceef-4c4f-90ea-f75096758d30",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,\n",
       "       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
       "       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
       "       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3,\n",
       "       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n",
       "       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n",
       "       3, 3], dtype=int64)"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "Y_lab=np.array(data[0])\n",
    "Y_lab"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "fb413ed4-bfaa-46f8-bba9-22d42ce2fdf3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1.423e+01, 1.710e+00, 2.430e+00, ..., 1.040e+00, 3.920e+00,\n",
       "        1.065e+03],\n",
       "       [1.320e+01, 1.780e+00, 2.140e+00, ..., 1.050e+00, 3.400e+00,\n",
       "        1.050e+03],\n",
       "       [1.316e+01, 2.360e+00, 2.670e+00, ..., 1.030e+00, 3.170e+00,\n",
       "        1.185e+03],\n",
       "       ...,\n",
       "       [1.327e+01, 4.280e+00, 2.260e+00, ..., 5.900e-01, 1.560e+00,\n",
       "        8.350e+02],\n",
       "       [1.317e+01, 2.590e+00, 2.370e+00, ..., 6.000e-01, 1.620e+00,\n",
       "        8.400e+02],\n",
       "       [1.413e+01, 4.100e+00, 2.740e+00, ..., 6.100e-01, 1.600e+00,\n",
       "        5.600e+02]])"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_data=np.array(data.iloc[:,1:14])\n",
    "X_data"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2c7b6fa9-16e9-46a9-8e9d-07384e76536c",
   "metadata": {},
   "source": [
    "### 标准化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "be265aff-4b5a-48dd-861e-abb842c65b1f",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "std = StandardScaler()\n",
    "X_data = std.fit_transform(X_data*1.0)     "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "242e24b8-5f57-4a5b-927c-07acfbd2fa02",
   "metadata": {},
   "source": [
    "### PCA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "caf9a404-aea7-4be9-8213-af131a321fcc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(178, 2)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.decomposition import PCA \n",
    "pca = PCA(n_components=2)\n",
    "X_pca = pca.fit_transform(X_data)\n",
    "print(X_pca.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a0a11035-f60c-41ec-8d82-5b79dc8a29d5",
   "metadata": {},
   "source": [
    "### 判断几类"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "5187a6ba-bdc2-4823-8b3b-b3aed0bd01fe",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Python\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\Python\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\Python\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\Python\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\Python\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\Python\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\Python\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'wcss: sum of dist. of sample to their closest cluster center')"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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Z84cevXqxZgxY0hNTdXvs7W1lXVWbtO0aVM6derErFmzePfdd1GpVCxfvhy1Wi1LbvyLt7d3mdvd3d3x8/O7z2kqt8aNG9OoUSNmzZrF22+/jaurK5s2beL48eN888035o5X6dja2jJq1CiWLFmCt7c3rVq14scff2T//v3ysPb/cP78efz9/c26FpvRzZGdnR06nQ6VSoW3tze1atXCx8dHGiNxX/z6668UFhayY8cOduzYUWLfgAEDeO+998yUrPJRKBQsXLiQjz76iMmTJ5OVlUVISAiff/45vr6+5o4nqiilUsny5cuZN28ekydPRq1WExgYyLp162jSpIm541VK48aNw87OjgULFpCYmEhAQACffPKJXGn5DykpKbi4uJg1g9EPnoXiBQsPHjzIwYMHOXToEElJSdSrV4/27dvTvn17HnrooYrIKoQQQghR4crVHP3b2bNnWbZsGTt27EChUHDu3DlTZBNCCCGEuO/KNSFbp9Nx8uRJDhw4wIEDBzhx4gRarZbQ0NBSC/QJIYQQQlQlRo8cjR8/niNHjpCdnY2LiwtdunSha9eudO7cWSbDCiGEEKLKM3rkKD4+nsGDB9OtWzdatWpV4onMQgghhBBVnUnmHAkhhBBCVBdy/70QQgghxG2kORJCCCGEuI00R0IIUcnIbAchzEuaIyGEyQ0ZMoTAwEBOnTpV5v7w8HBee+21+5zqH4cPH6ZPnz60aNGCkSNHluscr732msmfUVdQUMDcuXP54YcfTHpeIYRxpDkSQlQIjUbD66+/TkFBgbmjlPL++++j1WpZuXIlU6dONXccvaSkJD799FOKiorMHUWIGk2aIyFEhXBycuLChQssWbLE3FFKycjIoE2bNjzwwAPyPDAhRCnSHAkhKkSzZs147LHHWL16NadPn77jsRqNhs8//5x+/frRqlUrunXrxrx588jPzzf6+169epWJEyfSsWNHgoODGTJkCFFRUQDExsbSpEkT4uLi2LZtG02aNOHw4cNlnken0/H555/Tt29fWrVqRa9evVi1atV/zgcq61Lh1q1badKkCbGxsQDk5+cza9YsunTpQosWLXjwwQdZu3atPluPHj0AeP3110tcsouMjGTw4MEEBQXRrl07pk2bRlpaWonvExgYyObNm+nUqRNdunThwoULRtdOCFFMmiMhRIWZPn06bm5ud728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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.cluster import KMeans\n",
    "wcss=[]\n",
    "for i in range(1,8):\n",
    "    kmeans=KMeans(n_clusters=i,init='k-means++',)\n",
    "    kmeans.fit(X_data)\n",
    "    wcss.append(kmeans.inertia_)\n",
    "    \n",
    "plt.plot(range(1,8),wcss)\n",
    "plt.title('Elbow Method')\n",
    "plt.xlabel('No. of cluster')\n",
    "plt.ylabel('wcss: sum of dist. of sample to their closest cluster center' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "id": "f9bf9bb4-b16e-46ae-b0fd-46a8b6f93677",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGeCAYAAABGlgGHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABtVUlEQVR4nO3dd3wT9f8H8FdGk+5FSxlllhZQZGiLgAjCV0QFv4r8AOdXhsgWlK8oGxQEZQiIiAIKiiiIfEVBlKWADCl700VbEEqhdNI2aZL7/VFzTdqkTdI0l7av5+PBg+vlPrn3Xca981knEwRBABEREZFE5FIHQERERLUbkxEiIiKSFJMRIiIikhSTESIiIpIUkxEiIiKSFJMRIiIikhSTESIiIpIUkxEiIiKSFJMRIiIikpRS6gAqIggCDAYBcrnM7H8Adi1X1bauLsfYGFt1KMfYGBtjc//YqvqYZDIZbOX2NSMGg4CcnALIZDLcvauBTCZDTk6BuM6WZXvKuWIfjI2xVYfYauIxMTbGxthcd0z2cPtkhIiIiGo2JiNEREQkKSYjREREJCkmI0RERCQpJiNEREQkKSYjREREJCkmI0RERCQpJiNEREQkKSYjREREJCkmI0RERCQpJiNEREQkKSYjREREJCkmI0RERCQppdQB1HaCIKBQo4NGqweAcpcLtTqobNzW1eUYW82LrSYeU1XtQxAEu+9SSkQl7E5GMjIyMH/+fBw4cAAajQYxMTGYNGkSWrRoAQCYPHkytmzZYlYmLCwM+/fvd07ENYggCJj9ZSzir2ZJHQoRVUJkeACmvRItdRhE1ZbdycioUaMgl8uxatUqeHt7Y+nSpRg8eDB27doFLy8vXL58GSNHjsRLL70kllEoFE4NuqbQaPVMRIhqgPhr2dAWGaQOg6jasisZyczMRHh4OEaNGoXIyEgAwOjRo/H0008jPj4e9957LxISEjB69GiEhoZWScA11fI3ukHtoUBgoDeysvIBoMxyTm4B/P28rD4uZTnGVvNiq4nH5Ox9aIr0GPsRa32JKsuuZCQoKAiLFy8W/759+zbWrFmDevXqoUWLFkhOToZGo0FERITTA63p1B4KqFUKeKqVUKuKa5JKL2s1ynIfl7IcY6t5sdXEY6qKfRBR5TncgXX69OnYtGkTVCoVPv30U3h7eyMuLg4ymQzr1q3D/v37IZfL0b17d0yYMAF+fn4OB6lQFA/6kctlZn/bumxPOVfsw3RZLK+QievdJTZ3Pm+MzX3L1abY5IqSphm5ouw2PG+MzV1jc8Ux2UMmCILgSMGEhAQUFhbi22+/xbZt27Bhwwbs2bMHK1euxBtvvIHu3bsjJSUFH3zwAerXr49169ZBLrc/yJrcS71Qo8OAKdsBAN+/3weeag5uIqpO+Bkmcg7HUhgALVq0QJs2bfDee+8hPDwc69evx7hx43DkyBEMHz4cUVFR6NWrFxYuXIijR4/i7NmzDu3HYBCQk1MAAMjLKwQA5OQUiOtsWbannCv2YbpslJPrfrG583ljbO5brlbFllvyOTYuu01s7nzeGFu1LWfPtvawK43PyMjA4cOH8cQTT8A4QkYulyMiIgLp6emQyWTw9/c3KxMVFQUASEtLQ7t27ewOEAD0+uKqUINBMPvb1mV7yrliH6bLYnm9IK53l9jc+bwxNvctV5tiM+hLKpaNy+4SmzPLMbaaF5srjskedtWMpKenY+LEiTh69Ki4rqioCBcuXEBERAQmTpyIYcOGmZUx1ogY5yEhIiIiMmVXMtKqVSt07doVs2fPxrFjxxAXF4e3334bOTk5GDx4MPr27YuDBw/i008/RWpqKvbt24cpU6agb9++HGFDREREFtnVTCOTybBkyRIsWrQIEyZMQG5uLqKjo/HNN9+gQYMGaNCgAZYuXYqVK1di5cqV8PPzw1NPPYUJEyZUUfhERERU3dnd9dvPzw+zZs3CrFmzLD7eu3dv9O7du7JxERERUS3h8GgaIiIiImdgMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSsjsZycjIwFtvvYVOnTqhQ4cOeO2115CQkCA+fvHiRbz00kto3749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r8fcuXPFZEOlUgEo7j/i7+9vtm1UVBQAIC0tDe3atbM7OCO9vri6zWAQzP62ddmecq7Yh+myWF4viOvdJTZ3Pm+1JTaDXjBbduVnoTaeb8ZWc2Ir/dlxp9iqczl7trWHXTUjGzZswHvvvYcXX3wRS5YsERMRAJg4cSKGDRtmtr2xRqRFixYOBUdEREQ1n83JyJUrV/D++++jV69eGDFiBDIyMnDr1i3cunULubm56Nu3Lw4ePIhPP/0Uqamp2LdvH6ZMmYK+fftyhA0RERFZZXMzzW+//YaioiLs2rULu3btMnusX79+mD9/PpYuXYqVK1di5cqV8PPzw1NPPYUJEyY4O2YiIiKqQWxORkaOHImRI0eWu03v3r3Ru3fvSgdFREREtYdj422JiIiInITJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERSYrJCBEREUmKyQgRERFJiskIERERScquZCQrKwszZsxAt27dcP/99+P555/HsWPHxMcvXryIl156Ce3bt8cjjzyCNWvWOD1gIiIiqlnsSkbefPNNnD59GosXL8bmzZtx7733YtiwYUhMTERmZiaGDBmCpk2b4ocffsC4ceOwdOlS/PDDD1UVOxEREdUASls3TElJwcGDB/Htt9/i/vvvBwBMnToV+/fvx7Zt2+Dp6QmVSoVZs2ZBqVQiIiICKSkpWLVqFfr3719lB0BERETVm801I0FBQfj888/Rpk0bcZ1MJoMgCMjOzsaxY8cQExMDpbIkv+nUqROuXLmCjIwM50ZNRERENYbNNSP+/v7o3r272bodO3YgNTUVXbt2xUcffYSoqCizx+vWrQsAuH79OurUqeNwkApFcc4kl8vM/rZ12Z5yrtiH6bJYXiET17tLbO583mpLbHKFzGzZlZ+F2ni+GVvNiU2uMJRsoyi7TW0/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e78fagrjd7a182X6nW36fWv6vWYv43erpc+m6fdpfHy8xW0ruo5VhtvOwDphwgQAQJMmTXDx4kXk5+ejcePGuHr1KnJyctCqVSvEx8dDLpfjoYcewpEjR6BUKhEfH4927dqhadOmuPfee8Xn27x5MwRBQOPGjfHbb78hIiICd+/eRd++ffHrr79CLpdDo9Hgsccew6FDh5Cfn4+2bdvi999/R3h4OKKiorB79260bt0aDRs2RJMmTaDRaLB3716x3P79++Hr64tmzZrB29sbhw8fxksvvYTt27dDr9fDYDDA398fcrkcwcHBAIAHHngAv/zyC1QqFbp3746vvvoKQUFByM/Px+OPP46NGzdCpVKhfv36aNCgAaZPn463334bH374IaZMmYKioiKoVCpcunQJeXl58Pb2RsOGDZGRkYEGDRpAqVQiKCgIhw4dQseOHREcHIwNGzagefPmWLlyJVauXAkfHx8x9tzcXPj5+eHmzZu49957sW/fPjRo0ABr167F4sWLUb9+faxZs0Y8x/n5+TAYDACKL8zBwcF44IEHsHPnTjRt2hRdu3aFn58fMjMz8d///hdHjhzB7du3oVQq8eijj+LgwYMQBAFKpRIymQx//vkn/Pz8ULduXfFcCIKAp59+Gps3b0ZoaChu376NRo0awcvLC0lJSejWrRuGDx8OAJg6daoYz4EDB9C4cWMMHDgQGzduRL169dC4cWOcO3dOPL4bN24gNzcXrVu3Rk5ODjQaDfr06QONRoP+/fvj4MGDaN++PYqKihASEoJDhw7hvffeQ6tWreDp6Yljx47h/vvvx6BBg3D16lX06dMHR48eRW5uLh555BEcOXIE7du3R0BAAHbv3o1HH30Uhw4dwp07d/DEE0/gr7/+wpkzZzBs2DDk5OTg5MmT6NatG/Ly8sQvB4PBgAcffBAeHh744osvMHToUKSnpyMoKAhnz5412+/HH3+MadOm4bvvvsOYMWMwefJkPPvsswgJCUHbtm2hVquxY8cOdOvWDefPnzeLs0mTJmjatCk+//xz3HPPPeI+7969C7VaLZ4LnU6H77//HkOHDkVWVhYSExOhVquxYsUKPPjgg9i9ezcef/xxnD59GkuWLMHRo0eh1+tx+/ZthISEoHPnzjAYDDh06BCysrKwZcsWNG/eHD169IBOp8Nvv/2G//u//0N2djYe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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import scipy\n",
    "from scipy.cluster import hierarchy\n",
    "dendro=hierarchy.dendrogram(hierarchy.linkage(X_data,method='ward'))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2b99f0b9-56a9-4d67-afb7-e373e16f100e",
   "metadata": {},
   "source": [
    "判断：可能存在3类"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "610bde26-804c-4574-9576-5239f9965da3",
   "metadata": {},
   "source": [
    "### 模型训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "id": "4ddf42aa-06e2-4a59-89b6-960c00dceaf0",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Python\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-3 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-3 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-3 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-3 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-3 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-3 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-3 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-3 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-3 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-3 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-3 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-3 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-3 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-3 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-3\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>KMeans(n_clusters=3)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-3\" type=\"checkbox\" checked><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;KMeans<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.cluster.KMeans.html\">?<span>Documentation for KMeans</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>KMeans(n_clusters=3)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "KMeans(n_clusters=3)"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "kmeans = KMeans(n_clusters=3)\n",
    "kmeans.fit(X_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "id": "f0a0f6d0-aa7b-4801-88e8-5dd4eeccd8df",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[-0.92607185 -0.39404154 -0.49451676  0.17060184 -0.49171185 -0.07598265\n",
      "   0.02081257 -0.03353357  0.0582655  -0.90191402  0.46180361  0.27076419\n",
      "  -0.75384618]\n",
      " [ 0.83523208 -0.30380968  0.36470604 -0.61019129  0.5775868   0.88523736\n",
      "   0.97781956 -0.56208965  0.58028658  0.17106348  0.47398365  0.77924711\n",
      "   1.12518529]\n",
      " [ 0.16490746  0.87154706  0.18689833  0.52436746 -0.07547277 -0.97933029\n",
      "  -1.21524764  0.72606354 -0.77970639  0.94153874 -1.16478865 -1.29241163\n",
      "  -0.40708796]]\n",
      "[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n",
      " 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1\n",
      " 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
      " 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n",
      " 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]\n"
     ]
    }
   ],
   "source": [
    "# 查看模型结果\n",
    "print(kmeans.cluster_centers_) #k个类中心点\n",
    "print(kmeans.labels_)  #每一个样本所属的聚类编号"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "id": "582f69cb-ab52-4903-b414-ad3297d0f815",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 2, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,\n",
       "       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
       "       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
       "       2, 2])"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#使用predict方法对指定的数据集X进行预测\n",
    "cluster_label = kmeans.predict(X_data) \n",
    "cluster_label"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "id": "9c98b65c-b178-4f0f-9e44-f7a9dc0ced72",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbcAAAG6CAYAAACLCQg1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABCHklEQVR4nO3deVhUZf8G8PvMwDAsgoAKKK7ggIJr4lLkrqVpuZeappaaldmrtry/drW0zSzTNFPLBU3NpdI0c8klc0kRFSEX3FC2kU2WGWCe3x++TBGoMMDM8HB/rsurOOeZM9/z5cDNWUcRQggQERFJRGXrAoiIiCoaw42IiKTDcCMiIukw3IiISDoMNyIikg7DjYiIpMNwIyIi6TDciIhIOgw3IjvGZywQWYbhRnbr8OHDCAoKKvFfaGgoOnTogOHDh+Pbb7+F0Wi0WZ3z589HUFAQPv30U/O0jRs3IigoCNOnT7d4uVFRUXj88ceRn59fEWWWqKx1Fvb/2rVrdlGPJUaNGoWgoCD8/vvvlfYeZHsOti6A6F5cXFzQo0ePItMKCgqQkZGBo0eP4vjx4/jll1/wzTffwNHR0UZVVrxhw4Zxz43IQgw3snuenp74+OOPS5x37do1jBgxAseOHUNERASeeuopK1dXsl69eqFVq1aoUaOGxctgsBFZjoclqUrz9/fH+PHjAQC//PKLjav5W40aNRAQEIA6derYuhSiaonhRlVegwYNAAApKSnmaa+99hqCgoJw5MgRTJ48GS1btkTHjh2xcuVK85jExETMmDED3bt3R2hoKO6//3785z//wV9//VXi+yQlJWHGjBno1q0bWrZsiUGDBmHHjh0ljr3buaM//vgDzz33HB544AG0adMG/fv3x+LFi5GTk1PktYVCQkKKfA0AGRkZmDt3Lh5++GG0aNECHTp0wMSJE3Hs2LES68nMzMTcuXPRq1cvtGzZEn379sV3331X4tiKFhcXh7feegsPPfQQWrdujZYtW6Jnz5545513kJiYeMfXHT58GMOHD0erVq3QqVMnTJs2DXFxcSWOLWs/SH4MN6ryCsOobt26xea9+eabOHToEB588EG4u7sjODgYAHD27FkMGDAAq1evhlqtRteuXVGvXj1s27YNQ4YMwW+//VZkOdeuXcOwYcOwevVqODo6omvXrsjNzcWLL76I7du3l7rWJUuWYMyYMdizZw8aNWqEBx54AKmpqZg7dy7Gjx8Po9GIBg0aoH///ubX9OvXr8jX169fx6BBg8yBGB4ejqZNm2L//v0YNWoU1q9fX+Q909PTMXLkSCxevBi5ubno2rUrtFot3nrrLSxdurTUtVvi2LFjGDhwIL777ju4ubmhc+fOaNOmDVJSUrBmzRo88cQTuHXrVrHXnTx5EuPGjUNCQgK6dOmCWrVq4aeffsKgQYMQFRVVZGxZ+0HVhCCyU3/88YfQ6XSiW7dudxxz9uxZERYWJnQ6ndiwYYN5+quvvip0Op1o3bq1uHLlihBCiIKCAiGEEEajUfTs2VPodDrx9ddfC5PJZH7drl27REhIiAgLCxN6vd48feLEiUKn04k333xT5OfnCyGEMJlMYt68eUKn0wmdTifmzp1rHv/9998LnU4npk2bZp4WFRUlgoODRdu2bcWxY8fM07OyssSTTz4pdDqdWL58uXl64XLz8vKKrPOIESOETqcT7733njAajebpkZGRol27diIkJEScO3fOPH3GjBlCp9OJiRMnipycHPP0devWmd/jn3XeTeH4q1evlmp8v379hE6nEzt27CgyPSkpSXTr1k3odDqxZcsW8/TCvul0OjF16lRhMBjM8+bPny90Op3o06dPke9ZWftR2OuDBw+Wah2oauKeG9m91NRUTJ8+vci/KVOmYPDgwRgwYADS09PRu3dvDBw4sNhre/Togfr16wMAVKrbm/vOnTtx5coVdO3aFU8//TQURTGP7969O4YNG4b09HRs2LABAJCQkIA9e/bA29sbb7zxBtRqNQBAURS8+OKLaNasWanW47vvvoPJZMKzzz6L++67zzzdxcUFL7/8Mho0aICkpKS7LuPkyZM4duwYgoKC8NprrxW5OrRVq1Z49tlnkZeXhxUrVgAAjEYjNm7cCEdHR7z33nvQarXm8UOHDi12FWpFysrKQmhoKAYPHozevXsXmVe7dm307NkTAEq8rcDd3R1vv/02NBqNedrzzz+P4OBgXLhwAX/88QeAsveDqg+GG9m97Oxs/Pjjj0X+7dq1C4mJiQgPD8ecOXPw+eefm8Prn3Q6XbFphb8YO3XqVOL7denSBcDtcz4AcOTIEfP4f/6yBW4HXOEv6XspXE737t2LzWvZsiV27tyJV1555a7LKKy9ffv2Ja5vYe2F73Xq1ClkZ2cjNDQU3t7excb/O3QqkqurK2bPno3333+/yPSkpCT89ttviImJAYAS71Hs3Lkz3N3di0xTFAVdu3YFAPz5558Ayt4Pqj54KwDZvXr16mH37t0WvdbDw6PYtBs3bgAAZs+ejdmzZ9/xtQkJCQBg3pvy8fEpcZy/v3+paklOTgZQ8rnB0iqsfeXKlUUujvm3iq69PI4fP47169cjOjoaV65cQXZ2NgCY95hFCbc83KkuPz8/AH+vV1n7QdUHw42kVtJf8yaTCQDQoUOHu16q7+XlBQBFDluWxMGhdD9GFfGkkcLaW7RogUaNGt1xXGHN96q98BBrZXn33XcREREBtVqN4OBgPPzwwwgMDESrVq2wf/9+LFq0qMTX/XsPuVBhEBb2vKz9oOqD4UbVTu3atQEA/fv3x9ChQ+853tfXFwAQHx9f4vx7nSf75/vGx8cjISEBjRs3LjZ/7dq18PHxQbdu3e66DAB44IEH8J///Oee71lRtVviyJEjiIiIgJ+fH5YuXYqAgIAi8+92lemd6ipcj8L1Kms/qPrgOTeqdsLCwgCg2OX+hVavXo3HHnsMCxcuBAB07NgRKpUKv//+O7KysoqN37t3b6net/Aikn379hWbd+HCBbz99tuYP39+qWrfv3+/ea/ln3799Vf069cP7777LoDb98h5eHggOjoa169ft7h2S0RGRgK4fV7v38FWUFBgPl9W0mHJQ4cOFVu/goIC7Ny5E8DtvW6g7P2g6oPhRtVO3759UadOHezcuRPLly8v8ss1KioK8+bNQ0xMjPliFG9vb/Tr1w8ZGRl4/fXXi1wAsWLFCvOFJ/cycuRIKIqChQsXmi+mAG5fVThjxgwAwKOPPmqe7uTkBOD2DdiFOnTogObNm+PMmTP48MMPi9Ry+fJlzJo1C+fOnTMfonN0dMSIESNQUFCAV155pcg9ZTt37sTmzZtLVbslPD09AdwOqsIb1AEgJycHb775Js6dOwcAMBgMxV57+fJlfPjhh+bvjclkwuzZs3Hp0iW0adMGrVq1AlD2flD1wcOSVO04Ozvjs88+w4QJEzBnzhysWrUKQUFBSEtLw/HjxyGEwOjRo4tcBfnf//4XMTEx+Pnnn3HixAm0atUKV69eRXR0NNq0aYMTJ07c831bt26NqVOn4pNPPsHgwYMRFhYGZ2dnnDx5Enq9Hp07d8bo0aPN4xs2bIi//voLo0ePRuPGjTFnzhy4uLhg7ty5eOqpp7B8+XJs3boVISEhyM3NxbFjx5CXl4fevXvjySefNC/nueeew/Hjx3H48GH07NkTYWFhSElJwfHjx0td+78NGTLkjufr3NzcsGPHDvTp0wdffPEF/vrrL/Ts2ROtW7eG0WjEiRMnkJmZiaZNm+LcuXNFnixTqFWrVvjmm2+wd+9e6HQ6xMbG4tKlS/D19cVHH31kHqcoSpn7QdUD99yoWmrbti02b96MJ554AkII7Nu3D1euXEGHDh2wYMECvP7660XGe3l5ISIiAhMmTICjoyP27NkDg8GAWbNmYfjw4aV+3wkTJuDrr79Ghw4dcObMGezfvx8eHh74z3/+gwULFhS5AOa9995DSEgILl26hMOHD+Pq1asAgMaNG2Pz5s14+umn4eLigoMHDyImJgahoaGYPXs2Pv300yLBo9Fo8PXXX2PatGnw9PTEb7/9hqSkJEybNg3Tpk2zqH+pqalISUkp8Z9erwdwO+TWrVuHIUOGwMnJCfv27cP58+fRokULfPrpp1ixYgUURcGBAweQl5dXZPldu3bFwoUL4eLigj179iArKwuPP/44NmzYYL5vsVBZ+0HVgyJKOuBNRERUhXHPjYiIpMNwIyIi6TDciIhIOgw3IiKSDsONiIikw3AjIiLp8CZuO3LgwAFkZWVBURTcf//9cHNzs3VJRBVu586duH79OnJycvDAAw+gRYsWti5JegcOHEBaWhoKCgrQt2/fIp97Jyve52YnPvjgA2zevBleXl64fPkyWrdujUceeaRMNwhT2W3evBl6vR5PP/20rUupFj7++GNs3rwZwcHBiI6ORp06dTBq1CgMHjzY1qVJ64MPPsDWrVtRp04dnD59GkOHDsXMmTNtXVal42FJO7B37178/PPP+Oqrr/Ddd99h165d8PDwwLp164o8aogqjhACQgj88ccfWLZsGb7//ntblyS9rVu34ueff8aSJUvw9ddfY9euXdBoNNiyZUuFfBwQFbdp0yZs27YNX331Fb755hu8//77+PXXX5Gammrr0iodw80OJCQkwMvLC0FBQXBzc4OPjw9mzpyJsLAw7N+/H/PmzbN1idIxmUxQFAUajQbZ2dn49ttvsXr1aluXJbWLFy8iKCgIwcHByMvLg7OzM5555hlERkbi/Pnzti5PSufOnUO7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iVJdULJhQ9GPH3d0dESTJk0wc+ZM7NixA/369YO/vz80Gg2SkpJw4MABbN68GW3atKk2T/UnIiL7Uapwe+ONN4rcAwT8/REJhw8fxpEjR0qcd+LECYwaNQpnz56tiFqJiIhKpVThNmDAgGLhRkREZK9KFW5z5syp7DqIiIgqTLkenExERGSPyvV048TERMTHx8NoNOKfT/ESQsBgMCAlJQW7d+/Gl19+We5CiYiISsuicDMajZg+fTp27txZ0fUQERGVm0WHJZctW4ZffvkFarUawcHB8PPzAwC0a9cOOp0OarUaQgg0btwYn3/+eYUWTEREdC8WP1tSpVLh22+/xaZNmzB16lQAwNtvv40tW7Zg165daNGiBa5cuWIOPiIiImuxKNyuXLmCli1b4r777gMAtGzZEkIIHD9+HADg4+ODzz77DACwfPnyCiqViIiodCwKt7y8PPj6+pq/rl+/PhwdHREbG2ueVrduXbRp0wbR0dHlr5KIiKgMLAo3Ly8vpKWlmb9WFAX16tXDuXPnio1LSEgoV4FERERlZVG4tWrVCsePH8fVq1fN0wIDA3H69GlkZ2ebp507dw6urq7lr5KIiKgMLAq34cOHw2g0YujQoVi1ahUAoG/fvsjOzsbkyZOxe/duvPnmm4iLi0NISEiFFkxERHQvFoVbp06d8OqrryIrKwsnTpwAADz88MNo0aIFDh48iOeffx7r16+HWq3G5MmTK7RgIiKie7H4CSVjx45Fv379kJKSAgBQqVRYsWIFli5disjISHh5eeHJJ59EaGhohRVLRERUGuV6/Fbt2rVRu3Zt89fOzs544YUXyl0UERFReVTqg5P/7//+j4cliYjI6sq153Yv+/btg16vr8y3ICIiKoYfeUNERNJhuBERkXQYbkREJB2GGxERSYfhRkRE0mG4ERGRdEp1K0CPHj0sWvjNmzcteh0REVF5lCrc4uPjLX4DRVEsfi0REZElShVuK1asqOw6iIiIKkypwq19+/aVXQcREVGF4QUlREQkHYYbERFJh+FGRETSYbgREZF0GG5ERCQdRQghbF1EZbuhT8bYj96wdRllFli3Pr548Q288PksnL9+1dbllMmmd161dQkWURQNtE7+yDVcgxBGW5dTLVTlnqsUV1uXYBFFcYBG4w2jUQ8h8m1dTqlpNN5QlNJ9DCn33IiISDqlisAN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",
      "text/plain": [
       "<Figure size 480x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.metrics import confusion_matrix\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "# 定义了一个更美观误分类矩阵的函数\n",
    "def show_confusion_matrix(cnf_matrix, class_labels):\n",
    "    plt.matshow(cnf_matrix, cmap=plt.cm.YlGn, alpha=0.7)\n",
    "    ax = plt.gca()\n",
    "    ax.set_xlabel('Predicted Label', fontsize=16)\n",
    "    ax.set_xticks(range(0,len(class_labels)))\n",
    "    ax.set_xticklabels(class_labels,rotation=45)\n",
    "    ax.set_ylabel('Actual Label', fontsize=16, rotation=90)\n",
    "    ax.set_yticks(range(0,len(class_labels)))\n",
    "    ax.set_yticklabels(class_labels)\n",
    "    ax.xaxis.set_label_position('top')\n",
    "    ax.xaxis.tick_top()\n",
    "\n",
    "    for row in range(len(cnf_matrix)):\n",
    "        for col in range(len(cnf_matrix[row])):\n",
    "            ax.text(col, row, cnf_matrix[row][col], va='center', ha='center', fontsize=16)\n",
    "\n",
    "# 误分类矩阵\n",
    "class_labels = [0,1,2,3]\n",
    "cnf_matrix = confusion_matrix(Y_lab,cluster_label) #cluster_label是聚类结果，y_lab是真实的类标签\n",
    "show_confusion_matrix(cnf_matrix, class_labels)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "85815d6f-e979-4d9e-a696-3e1f3361a1e2",
   "metadata": {},
   "outputs": [],
   "source": [
    "真值：Y_lab(1,2,3)\n",
    "聚类拟合值：(1,0,2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0d07ba77-4131-4a77-87cc-da25ef8629d4",
   "metadata": {},
   "outputs": [],
   "source": [
    "由图178个样本有6个聚类后分类错误"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "id": "030178b3-2339-4156-a4e3-9b44500cd115",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "96.62921348314607"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "accuracy=(172/178)*100\n",
    "accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b44fcf3c-6d90-4076-b824-069bc96b446c",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
